리팩터링 정의
리팩터링: [명사] 소프트웨어의 겉보기 동작은 그대로 유지한 채, 코드를 이해하고 수정하기 쉽도록 내부 구조를 변경하는 기법
- 함수 추출하기
- 조건부 로직을 다형성으로 바꾸기
리팩터링(하다): [동사] 소프트웨어의 겉보기 동작은 그대로 유지한 채, 여러 가지 리팩터링 기법을 적용해서 소트트웨어를 재구성하다.
코드베이스를 정리하거나 구조를 바꾸는 모든 작업을 ‘재구성’이라고 표현한다. 리팩터링은 재구성 중 특수한 한 형태이다. 코드를 정리하는 작업을 리팩터링이라고 말하지 않는다. ‘특정한 방식’에 따라 코드를 정리하는 것만이 리팩터링이다.
리팩터링은 성능 최적화와 비슷하다. 둘 모두 코드를 변경하지만 전반적인 기능은 그대로 유지한다. 단지 목적이 다를 뿐이다.
리팩터링하는 이유
코드를 건강한 상태로 유지하도록 도와준다.
소프트웨어 설계가 좋아진다.
구조를 충분히 이해하지 못한 채 단기적 목표를 위해서만 코드를 수정하다 보면 쉽게 구조가 무너지게 된다. 그로인한 악효과는 누적된다. 구조를 파악하기 어려워지면 유지하기는 더 어려워진다.
소프트웨어를 이하기 쉬워진다.
리팩터링은 코드가 더 잘 읽히게 도와준다. 코드의 목적이 더 잘 드러나게, 내 의도를 명확하게 전달하도록 개선해야 한다. 다른 사람을 배려하기 위해서만은 아니다. 결국 바로 나 자신일 때가 많다.
버그를 쉽게 찾을 수 있다.
코드를 이해하기 쉽다는 말은 버그를 찾기도 수월하다는 말이기도 하다. 리팩터링의 과정에서 코드가 하는 일을 명확하게 다듬게 되고 버그를 지나칠려야 지나칠 수 없을 정도까지 명확해진다.
프로그래밍 속도를 높일 수 있다.
리팩터링이 코드 품질 향상에 도움이 된다는 것은 의심의 여지가 없다. 다만, 전체 개발 속도는 떨어지지 않을까 걱정을 할 수도 있다. 개발 초기에는 진행 속도가 빠르지만, 시간이 지나 새로운 기능을 하나 추가하는 데 훨씬 오래 걸린다는 말을 많이 한다. 기능을 추가하면 버그가 발생하는 일이 잦고, 이를 해결하는 시간은 한층 더 걸린다. 코드베이스에 패치의 패치가 덧붙여지면서 동작을 파악하기가 어려워지는 것이다.
내부 설계가 잘 된 소프트웨어는 새로운 기능을 추가할 지점과 어떤 부분을 고칠지를 쉽게 찾을 수 있다. 버그를 만들 가능성도 줄고, 디버깅 또한 쉽다.
언제 리팩터링해야 할까?
3의 법칙
1. 처음은 그냥 한다.
2. 같은 일을 했다면, 일단은 계속 진행한다.
3. 비슷한 일을 세 번째 하게 됐다면 리팩터링한다.
댓글